www.gusucode.com > 通用 ThunkC++源码程序 > 通用 Thunk/GenericThunk_source_sample/GenericThunk_source/GenericThunk_source/src/Thunk/ThisToStd.cpp

    #include <Thunk/ThisToStd.h>

#define THUNK_MACHINE_CODE_IMPLEMENT
#include <Thunk/MachineCodeMacro.h>

namespace Thunk
{
	dword_ptr ThisToStd::GetObject() const
	{
		return m_this;
	}

	void ThisToStd::SetObject(dword_ptr newObj)
	{
		m_this = newObj;
		Helper::FlushInstructionCache(&m_this,sizeof(m_this));
	}

	dword ThisToStd::GetMethod() const
	{
		return Helper::GetTransferDST(&JMP);
	}

	void ThisToStd::SetMethod(dword newMethod)
	{
		Helper::SetTransferDST(&JMP,newMethod);
		Helper::FlushInstructionCache(&m_method,sizeof(m_method));
	}
	
	ThisToStd::~ThisToStd()
	{}

	ThisToStd::ThisToStd(dword_ptr Obj,dword method)
		THIS_TO_STD_CODES()
	{
		SetObject(Obj);
		SetMethod(method);
	}

	ThisToStd::ThisToStd(const ThisToStd &src)
		THIS_TO_STD_CODES()
	{
		*this = src;
	}

	ThisToStd& ThisToStd::operator = (const ThisToStd &rhs)
	{
		SetObject( rhs.GetObject() );
		SetMethod( rhs.GetMethod() );
		return *this;
	}

	bool ThisToStd::operator == (const ThisToStd &rhs) const
	{
		return ( GetObject()==rhs.GetObject() && GetMethod()==rhs.GetMethod() );
	}

	bool ThisToStd::operator != (const ThisToStd &rhs) const
	{
		return !(*this==rhs);
	}

	dword_ptr ThisToStd::Attach(dword_ptr newObj)
	{
		dword_ptr oldObj = GetObject();
		SetObject(newObj);
		return oldObj;
	}

	dword ThisToStd::Attach(dword newMethod)
	{
		dword oldMethod = GetMethod();
		SetMethod(newMethod);
		return oldMethod;
	}
}